#!/bin/bash
#
# Copyright (C) 2011-2020 Aratelia Limited - Juan A. Rubio and contributors
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.

#
# Tizonia's parallel build wrapper script
#
# Parallel configuration, make and make install for those sub-projects that can
# effectivly be configured/built in parallel
#
# NOTE: THIS IS WORK IN PROGRESS AND SHOULD NOT BE USED YET!!!!
#

declare -ar TIZONIA_DEV_BUILD_PARALLEL_DEPS=( \
    'parallel' \
    'tizonia-dev-build' \
)

source tizonia-common.inc

function main {
    # Check dependencies
    for cmd in "${TIZONIA_DEV_BUILD_PARALLEL_DEPS[@]}"; do
        command -v "$cmd" >/dev/null 2>&1 || { echo >&2 "This program requires $cmd. Aborting."; exit 1; }
    done

    # Build include, gmusic, soundcloud, tunein, iheart, youtube, plex, and chromecast packages in parallel
    local tmpsource=$(mktemp)
    for proj in "${TIZ_PROJECTS_ORDERED[@]}"; do
        if [[ "${TIZ_PROJECT_DIRS[$proj]}" != *"proxy"* ]]; then
            echo "Adding $proj"
            echo "$proj" >> "$tmpsource"
            if [[ "${TIZ_PROJECT_DIRS[$proj]}" == *"libtizplatform"* ]]; then
                break
            fi
        fi
    done

    # Da business
    cat $tmpsource | parallel --no-notice -k "tizonia-dev-build $@ --project"

    # Cleanup
    rm $tmpsource

    # Build platform, RM, core, and tizonia sequentially
    for proj in "${TIZ_PROJECTS_ORDERED[@]}"; do
        if [[ "${TIZ_PROJECT_DIRS[$proj]}" == *"plugins"* ]]; then
            break
        fi
        if [[ ( "${TIZ_PROJECT_DIRS[$proj]}" != *"proxy"* ) || ( "${TIZ_PROJECT_DIRS[$proj]}" == "tizrmproxy" ) ]]; then
            local proj_dir="$TIZONIA_REPO_DIR/${TIZ_PROJECT_DIRS[$proj]}"
            pretty_print "$GRN" "[$proj] : $proj_dir"
            tizonia-dev-build "$@" --project="$proj"
        fi
    done

    # Build plugins, config and player in parallel
    tmpsource=$(mktemp)
    for proj in "${TIZ_PROJECTS_ORDERED[@]}"; do
        if [[ "${TIZ_PROJECT_DIRS[$proj]}" == *"plugins"* \
            || "${TIZ_PROJECT_DIRS[$proj]}" == *"config"* \
            || "${TIZ_PROJECT_DIRS[$proj]}" == *"player"* ]]; then
            echo "$proj" >> "$tmpsource"
        fi
    done

    # Da business
    cat $tmpsource | parallel --no-notice -k "tizonia-dev-build $@ --project"

    # Cleanup
    rm $tmpsource
}

main "$@"
